home *** CD-ROM | disk | FTP | other *** search
- /* EMS.H
- *
- * EMS heap manager, v1.10
- *
- * Copyright 1994 Petteri Kangaslampi and Jarno Paananen
- *
- * This file is part of the MIDAS Sound System, and may only be
- * used, modified and distributed under the terms of the MIDAS
- * Sound System license, LICENSE.TXT. By continuing to use,
- * modify or distribute this file you indicate that you have
- * read the license and understand and accept it fully.
- */
-
-
- #ifndef __EMS_H
- #define __EMS_H
-
-
- struct emsHdl;
-
-
- /****************************************************************************\
- * struct emsBlock
- * ---------------
- * Description: Allocated EMS block structure
- \****************************************************************************/
-
- typedef struct emsBlk
- {
- ushort addr; /* address of block inside handle
- memory area */
- ushort bytes; /* size of block */
- struct emsBlk *next; /* pointer to next block in same
- handle */
- struct emsBlk *prev; /* pointer to previous block */
- ushort used; /* 1 if used, 0 if not */
- struct emsHdl *handle; /* handle of the block */
- } emsBlock;
-
-
-
-
- /****************************************************************************\
- * struct emsHandle
- * ----------------
- * Description: One EMS handle consisting of four pages. Used internally by
- * heap manager.
- \****************************************************************************/
-
- typedef struct emsHdl
- {
- ushort handle; /* EMM handle number */
- emsBlock *block; /* pointer to first block */
- struct emsHdl *next; /* pointer to next handle */
- struct emsHdl *prev; /* pointer to previous handle */
- } emsHandle;
-
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
- /****************************************************************************\
- *
- * Function: int emsInit(int *emmOK);
- *
- * Description: Initializes EMS heap. Must be called before other EMS heap
- * manager functions.
- *
- * Input: int *emmOK pointer to variable containing EMM
- * status
- *
- * Returns: MIDAS error code.
- * *emmOK contains 1 if Expanded Memory Manager was found (EMS
- * initialized succesfully) or 0 if not. Note that the lack
- * of Expanded Memory Manager is _not_ an error.
- *
- \****************************************************************************/
-
- int CALLING emsInit(int *emmOK);
-
-
-
- /****************************************************************************\
- *
- * Function: int emsClose(void);
- *
- * Description: Uninitializes EMS heap freeing all allocated blocks. Must be
- * called before program exits if emsInit() has been called.
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING emsClose(void);
-
-
-
- /****************************************************************************\
- *
- * Function: int emsAlloc(ushort bytes, emsBlock **ems);
- *
- * Description: Allocates an EMS memory block
- *
- * Input: ushort bytes number of bytes to be allocated
- * emsBlock **ems Pointer to EMS Block pointer
- *
- * Returns: MIDAS error code.
- * EMS block pointer stored in *ems, NULL if failure
- *
- \****************************************************************************/
-
- int CALLING emsAlloc(ushort bytes, emsBlock **ems);
-
-
-
- /****************************************************************************\
- *
- * Function: int emsFree(emsBlock *ems);
- *
- * Description: Deallocates an EMS block allocated with emsAlloc
- *
- * Input: emsBlock *ems pointer to block to be deallocated
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING emsFree(emsBlock *ems);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int emsMap(emsBlock *ems, void **memPtr);
- *
- * Description: Maps an EMS block to conventional memory.
- *
- * Input: emsBlock *ems pointer to block to be mapped
- * void **memPtr pointer to conventional memory ptr
- *
- * Returns: MIDAS error code.
- * Pointer to the conventional memory area where the block
- * was mapped is stored in *memPtr, NULL if failure.
- *
- \****************************************************************************/
-
- int CALLING emsMap(emsBlock *ems, void **memPtr);
-
-
-
- /****************************************************************************\
- *
- * Function: int emsSave(void);
- *
- * Description: Saves the EMS status. To be used by TempoTimer. Can only be
- * called once.
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING emsSave(void);
-
-
-
- /****************************************************************************\
- *
- * Function: int emsRestore(void);
- *
- * Description: Restores EMS status saved with emsSave(). To be used by
- * TempoTimer. Can only be called once.
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING emsRestore(void);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int emsAllocPages(emsHandle **emsh);
- *
- * Description: Allocates 4 pages of EMS memory to a handle. Used internally
- * by EMS heap manager.
- *
- * Returns: MIDAS error code.
- * Pointer to a emsHandle structure for the pages stored in
- * *emsh, NULL if failure.
- *
- \****************************************************************************/
-
- int CALLING emsAllocPages(emsHandle **emsh);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int emsFreePages(emsHandle *handle);
- *
- * Description: Deallocates an EMS handle allocated by emsAllocPages(). Used
- * internally by EMS heap manager.
- *
- * Input: emsHandle *handle pointer to handle to be deallocated.
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING emsFreePages(emsHandle *handle);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int emsSafe(void);
- *
- * Description: Sets the EMS safety flag on so that the EMS heap manager
- * can optimize page mappings. Until emsStopSafe() is restored,
- * no other routine than emsMap() must touch the EMS page
- * mappings
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING emsSafe(void);
-
-
-
- /****************************************************************************\
- *
- * Function: int emsStopSafe(void);
- *
- * Description: Sets the EMS safety flag off.
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING emsStopSafe(void);
-
-
-
-
- /****************************************************************************\
- * enum emsFunctIDs
- * ----------------
- * Description: ID numbers for EMS Heap Manager functions
- \****************************************************************************/
-
- enum emsFunctIDs
- {
- ID_emsInit = ID_ems,
- ID_emsClose,
- ID_emsAlloc,
- ID_emsFree,
- ID_emsMap,
- ID_emsSave,
- ID_emsRestore,
- ID_emsAllocPages,
- ID_emsFreePages,
- ID_emsSafe,
- ID_emsStopSafe
- };
-
-
- #ifdef __cplusplus
- }
- #endif
-
-
- #endif
-